#ifndef PLAYCODEVIDEO_H
#define PLAYCODEVIDEO_H

#include <QObject>
#include<QDebug>
#include<QImage>
#include<QString>
#include <QThread>
#include "code/encodevideo.h"
#include "model/configuremodel.h"

extern "C"  //表明引用C语言的库
{
//    #include “libavcodec/avcodec.h"
    #include "libavcodec/avcodec.h"          //包含了所有的ffmpeg编码器解压器
    #include "libavdevice/avdevice.h"        //输入输出设备操作
    #include "libavfilter/avfilter.h"       //提供一个机制，各种的过滤（滤镜）处理
    #include "libavformat/avformat.h"       //包含处理多媒体各种不同的格式
    #include "libavutil/avutil.h"           //工具性质的函数--加密解密 数据格式转换等
    #include "libpostproc/postprocess.h"    //多媒体操作多任务处理函数
    #include "libswresample/swresample.h"   //音频操作
    #include "libswscale/swscale.h"         //只针对图像数据   缩放、像素格式转换
}

class PlaycodeVideo :public QThread
{
    Q_OBJECT
public:
    PlaycodeVideo();
    //操作encode开始的函数
    void initPlayCode();
    //AVFrame RGB准备工作
    void initRGB();
    //AVFrame YUV准备工作
    void initYUV();

    bool getIsRun() const;
    void setIsRun(bool value);

    bool getIsStop() const;
    void setIsStop(bool value);

    EncodeVideo * encode;

private:
    QImage img;
    AVFormatContext* formatcontext;
    AVCodecContext* codeccontext;
    AVPacket* packet;
    int video_index;
    AVFrame* pictureRGB;    //保存输出数据  解码出来的数据
    AVFrame* picture;       //保存，输入数据  视频数据
    AVFrame* pictureYUV;
    SwsContext* swscontextRGB;
    SwsContext* swscontextYUV;
    uint8_t* bufferRGB;
    uint8_t* bufferYUV;
    AVInputFormat* ifmt;
    AVCodec* decoder;

    //摄像头编号
    QString cameraName;

    //速度
    int speed;
    //是否暂停
    bool isRun;
    //是否终止
    bool isStop;
//    EncodeVideo * encoder;

//    //定时器记录一定时间停止录制
//    QTimer *timer;

//    int seconds;
    // QThread interface
protected:
    void run();
signals:
    void sendImg(QImage);
public slots:
    void makeEncodeHeadTalier(QString(date));
};

#endif // PLAYCODEVIDEO_H
